﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Models;
using System.Json;
using log4net;
using TheBullysStore.Models.ModuloAdministracion.Gasto;
using TheBullysStore.Controllers.ModuloAdministracion;
using TheBullysStore.Models.ModuloAdministracion.TipoMoneda;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloServicios.ContratoPreventivo;
using TheBullysStore.Models.ModuloAdministracion.TipoGasto;
using TheBullysStore.Models.ModuloAdministracion.TipoDocumentoPago;

namespace TheBullysStore.Controllers.ModuloAdministracion.Gasto
{
    public class GastoController : Controller
    {
        //
        // GET: /Gasto/
        private static ILog log = LogManager.GetLogger(typeof(GastoController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        GastoFacade gastoFacade = new GastoFacade();
        ContratoPreventivoDAO contratoPreventivoDAO = new ContratoPreventivoDAO();
        EdificioFacade edificioFacade = new EdificioFacade();
        TipoGastoFacade tipoGastoFacade = new TipoGastoFacade();
        TipoDocumentoPagoFacade tipoDocumentoPagoFacade = new TipoDocumentoPagoFacade();
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Gasto()
        {
            return View();
        }

        public ActionResult RegistrarGasto()
        {
            return View();
        }

        public ActionResult BuscarGasto()
        {
            return View();
        }

        [HttpPost]
        public JsonResult registrarGasto(GastoBean gasto)
        {
            try {
            
                string conexion = gastoFacade.RegistrarGasto(gasto);

                if (conexion == "Bien")
                {
                    log.Warn("El Gasto: \"" + gasto.IdDocumento + "\"ya ha sido creado");
                    return Json(new { me = "Se ingreso correctamente" });
                }
                else
                {
                    log.Error("Registrar Gasto - Hubo un error");
                    return Json(new { me = "Existe un error" });
                }
            
            
            }
            catch (Exception ex)
            {
                log.Error("Registrar Gasto - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
        }

        [HttpPost]
        public JsonResult buscarGasto(GastoBean gasto)
        {
            try
            {
                List<GastoBean> listaGasto = gastoFacade.ListarGasto(gasto);

                return Json(new { listaGasto });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Gasto - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al buscar" });
            }
        }

        [HttpPost]
        public GastoBean GastoPagado(GastoBean gasto)
        {
            try
            {
                GastoBean gastoPagado = gastoFacade.GastoPagado(gasto);
                return gastoPagado;
            }
            catch (Exception ex)
            {
                log.Error("Gasto Pagado- GET(EXCEPTION):", ex);
                return null;
            }
        }

        [HttpPost]
        public JsonResult modificarGasto(GastoBean gasto)
        {
            try
            {
                string conexion = gastoFacade.ModificarGasto(gasto);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se modifico correctamente" });
                }
                else
                {
                    log.Error("Modificar Gasto - Hubo un error");
                    return Json(new { me = "Existe un error" });
                }
            }
            catch (Exception ex)
            {
                log.Error("Modificar Gasto - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
        }

        [HttpPost]
        public JsonResult eliminarGasto(GastoBean gasto)
        {
            try
            {
                string Conexion = gastoFacade.EliminarGasto(gasto);
                if (Conexion == "Bien")
                {
                    return Json(new { me = "Se elimino correctamente" });
                }
                else
                {
                    log.Error("Eliminar Gasto - Hubo un error");
                    return Json(new { me = Conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Eliminar Gasto - GET(EXCEPTION):", ex);
                return Json(new { me = "Existe un error" });
            }
        }

        [HttpPost]
        public JsonResult cargarProveedores(ContratoPreventivoBean contrato)
        {
            try
            {
                List<ContratoPreventivoBean> listaProveedores = contratoPreventivoDAO.ListarProveedores(contrato);
                return Json(new { listaProveedores });
            }
            catch (Exception ex)
            {
                log.Error("CargarProveedores - GET(EXCEPTION):", ex);
                return Json(new { listaProveedores = "Ocurrió un error al cargar las Proveedores" });
            }
        }

        [HttpPost]
        public JsonResult CargarEdificios(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);
                return Json(new { listaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("CargarEdificios - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al cargar los edificios" });
            }
        }
        [HttpPost]
        public JsonResult CargarTipoGastos(TipoGastoBean tipoGasto)
        {
            try
            {
                List<TipoGastoBean> listaGasto = tipoGastoFacade.ListarTipoGastos(tipoGasto);
                return Json(new { listaGasto });
            }
            catch (Exception ex)
            {
                log.Error("CargarTipoGastos - GET(EXCEPTION):", ex);
                return Json(new { listaGasto = "Ocurrió un error al cargar los tipos de Gastos" });
            }
        }
        [HttpPost]
         public JsonResult CargarTipoDocumento(TipoDocumentoPagoBean tipoDocumento)
        {
            try
            {
                List<TipoDocumentoPagoBean> listaTipoDocumentoPago = tipoDocumentoPagoFacade.ListarTipoDocumentoPago(tipoDocumento);
                return Json(new { listaTipoDocumentoPago });
            }
            catch (Exception ex)
            {
                log.Error("CargarTipoDocumento - GET(EXCEPTION):", ex);
                return Json(new { listaTipoDocumentoPago = "Ocurrió un error al cargar los tipos de Documento de Pago" });
            }
        }

    }
}
